﻿#ifndef NOSEPIECEOLYMPUSREMCB_H
#define NOSEPIECEOLYMPUSREMCB_H

#include "../NosepieceCommon/NosepieceInterface.h"

#include <QtCore/QObject>
#include <QtCore/QSettings>
#include <QtSerialPort/QtSerialPort>

extern "C"
{
NOSEPIECE_EXPORT Qly::NosepieceInterface * CreateInstance(QObject *parent);
NOSEPIECE_EXPORT void Release(Qly::NosepieceInterface * p);
}


namespace Qly {

class NosepieceOlympusREMCB  : public NosepieceInterface
{
    Q_OBJECT
public:
    explicit NosepieceOlympusREMCB(QObject *parent = nullptr);
    ~NosepieceOlympusREMCB() override;
    void writeSettings(QSettings &settings) override;
    void loadSettings(QSettings &settings) override;
signals:
    /**
     * @brief lensChanged 物镜改变时发出这个信号
     * @param oldLens 原来的物镜， 从 0 开始
     * @param newLens 新的物镜， 从 0 开始
     */
    void lensChanged(int oldLens, int newLens);

public slots:
    /**
     * @brief setLens 设置物镜转盘转到第 n 个物镜位置
     * @param n n 为 从 0 到 4 数字分别代表第 1 个到 第 5 个物镜
     */
    void setLens(int n) override;
    /**
     * @brief setLens 设置物镜转盘转到第 n 个物镜位置
     * @param oldLens 当前物镜的位置，从 0 开始
     * @param newLens 新物镜，从 0 开始
     */
    void setLens(int oldLens, int newLens) override;
    /**
     * @brief forward 切换到下一个物镜
     */
    void forward() override;
    /**
     * @brief reverse 切换到上一个物镜
     */
    void reverse() override;

    void showSetupDialog() override;

    void login();
private:
    QSerialPort * m_serialPort;
    QString m_comPort;
    int m_baudRate;
    int m_dataBits;
    int m_parity;
    int m_stopBits;

    void cmd(QString str);
};
}


#endif // NOSEPIECEOLYMPUSREMCB_H
